package cn.edu.ctgu.cyf;

import java.time.Duration;
import java.time.ZonedDateTime;

public class Date {
    public static final double RATE_UNDER_20 = 0.05;   // 20分钟内每分钟费率
    public static final double RATE_OVER_20 = 0.10;    // 超过20分钟后每分钟费率
    public static final int THRESHOLD = 20;            // 收费率分界时长（分钟）
    public static final double BASE_COST = 1.00;       // 超过20分钟后的基础费用

    /**
     * 计算通话费用（返回值包含中文提示）
     * @param start 通话开始时间（包含时区信息）
     * @param end   通话结束时间（包含时区信息）
     * @return 格式化的话费字符串（示例："话费为：1.05美元"）
     */
    public static String calculateCost(ZonedDateTime start, ZonedDateTime end) {
        // 计算持续时间（自动处理夏令时转换）
        Duration duration = Duration.between(start, end);
        long seconds = duration.getSeconds();

        // 验证时间有效性
        if (seconds < 0) {
            throw new IllegalArgumentException("结束时间不能早于开始时间");
        }

        // 将秒数向上取整到分钟（59秒进1分钟）
        long minutes = (seconds + 59) / 60;

        // 根据计费规则计算费用
        double cost;
        if (minutes <= THRESHOLD) {
            // 20分钟内：分钟数×费率，至少按1分钟计算
            cost = Math.max(1, minutes) * RATE_UNDER_20;
        } else {
            // 超过20分钟：基础费用 + 超时部分×费率
            cost = BASE_COST + (minutes - THRESHOLD) * RATE_OVER_20;
        }

        // 返回格式化结果（保留两位小数）
        return String.format("话费为：%.2f美元", cost);
    }
}